package week7.ww;

/**
 * GekloktWachtwoord klasse, dit is een uitbreiding van Wachtwoord.
 * Practicumopgave Programmeren I
 * @author W.Looge & R. Oost
 * @version 1.0
 */
public class GekloktWachtwoord extends Wachtwoord {

	/**
	 * Geeft aan hoe lang die wachtwoord geldig blijft (in seconden).
	 * @invariant verlooptijd >= 0
	 */
	private long verlooptijd = 600;
	
	/**
	 * Geeft aan wanneer dit wachtwoord is 'gestart' dwz,
	 * als dit moment langer dan 'verlooptijd' geleden is, is het wachtwoord verlopen.
	 * @ensure starttijd >=0
	 * @invariant starttijd <= System.currentTimeMillis();
	 */
	private long starttijd = System.currentTimeMillis();
	
	/**
	 * Geeft aan of dit wachtwoord verlopen is.
	 * @return true Als dit Wachtwoord is verlopen.
	 *         false Als dit wachtwoord nog niet is verlopen.
	 */
	public boolean isVerlopen() {
		//      Verlopen tijd in ms na starttijd			   De verlooptijd in ms
		return (System.currentTimeMillis() - this.starttijd) > this.verlooptijd * 1000;
	}
	
	/**
	 * {@inheritDoc}
	 * Reset bovendien de timer die aangeeft of dit Wachtwoord is verlopen.
	 */
	@Override
	public boolean setWoord(String oud, String nieuw) {
		boolean gelukt = super.setWoord(oud, nieuw);
		if (gelukt) { // Als veranderen is gelukt
			this.starttijd = System.currentTimeMillis();
		}
		return gelukt;
	}
	
	/**
	 * Levert de periode op (in seconden) dat dit Wachtwoord geldig blijft.
	 * @return long De periode (in seconden) dat dit Wachtwoord geldig blijft.
	 * @ensure result >= 0
	 */
	public long getVerlooptijd() {
		return this.verlooptijd;
	}
	
	/**
	 * Verandert de verlooptijd (in seconden) in de opgegeven waarde, voorwaarde is
	 * wel dat de voorgestelde verlooptijd groter is dan 0.
	 * @param verlooptijd Long met de verlooptijd die vanaf nu moet worden gebruikt.
	 * @require verlooptijd >= 0
	 * @ensure new.getVerlooptijd() == verlooptijd
	 */
	public void setVerlooptijd(long verlooptijd) {
		if (verlooptijd >= 0) this.verlooptijd = verlooptijd;
	}
}
